package me.yangxy.learning.dao;

import me.yangxy.learning.dao.model.BookItem;
import me.yangxy.learning.dao.model.DirectoryItem;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

/**
 * <p><a href="https://docs.spring.io/spring-data/jpa/docs/current/reference/html/">JPA官方文档</a></p>
 *
 *
 * Dao开发与使用原则如下：
 * <ol>
 *     <li>编写时均采用Hibernate+JPA模式，用来省略掉简单的CRUD查询，所以使用时，再不会出现性能瓶颈的情况下，尽量复用简单查询</li>
 *     <li>在简单CRUD无法满足功能/性能要求的情况下，优先参考官方的命名方式，创建查询</li>
 *     <li>如果官方命名方式也无法满足的时候，可以采用注解 {@link org.springframework.data.jpa.repository.Query} 的方式编写SQL（几乎无复用性，纯粹处理特定的业务场景）</li>
 * </ol>
 */
public interface DirectoryItemDao extends JpaRepository<DirectoryItem,Integer> {


    /*
       通过ExampleMatcher查询
        LostProperty obj=new LostProperty();
        obj.setMaterialName(materialName);
        obj.setRegisterTime(registerTime);
        obj.setStatus(status);
        //创建匹配器，即如何使用查询条件
        ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                .withMatcher("materialName", GenericPropertyMatchers.contains()) //姓名采用“开始匹配”的方式查询
                .withMatcher("registerTime", GenericPropertyMatchers.contains()) //姓名采用“开始匹配”的方式查询
                .withMatcher("status", GenericPropertyMatchers.contains()) //姓名采用“开始匹配”的方式查询
                .withIgnorePaths("id");  //忽略属性：是否关注。因为是基本类型，需要忽略掉

        //创建实例
        Example<LostProperty> ex = Example.of(obj, matcher);
        //查询
        List<LostProperty> ls = lostPropertyRespository.findAll(ex);

     */


    /*

    大型复杂SQL，读取文件后执行
    EntityManager manager = getEntityManager();
Query q = manager.createNativeQuery("BEGIN " + sqlScript + " END;");
q.executeUpdate();

     */
}
